package pruebas;
import modelo.*;
import junit.framework.TestCase;

public class MotorTest extends TestCase {
	
	private Win32 motor;
	private long TIEMPO_MS = Cronometro.INTERVALO_DE_TIEMPO;
	final long deltaTiempo = TIEMPO_MS / 2;
	
	protected void setUp() throws Exception{
		super.setUp();
		motor = new Win32();
		Cronometro.getInstance().deleteObservers();
		Cronometro.getInstance().addObserver(motor);
		Cronometro.getInstance().iniciar();
	}

	public void testCrearUnMotor(){
		assertTrue(motor.getAceleracion() == 0);
	}
	
	/* arroja InterruptedException para poder llamar a Thread.sleep(tiempo)*/
	public void testAcelerar() throws InterruptedException{
		assertTrue(motor.getAceleracion() == 0);
		assertTrue(motor.getVelocidad() == 0);
		Thread.sleep(TIEMPO_MS);
		assertTrue(motor.getAceleracion() == 0);
		assertTrue(motor.getVelocidad() == 0);
		motor.acelerar();
		assertEquals(motor.obtenerAceleracionMax(), motor.getAceleracion(), 0.001);
		Thread.sleep(TIEMPO_MS + deltaTiempo);
		double temp = 0;
		assertTrue((temp = motor.getVelocidad()) > 0);		
		Thread.sleep(TIEMPO_MS + deltaTiempo);
		assertTrue(temp < motor.getVelocidad());
	}

	public void testMantener(){
		assertTrue(motor.getAceleracion() == 0);
		motor.acelerar();
		motor.aceleracionCte();
		assertTrue(motor.getAceleracion() == 0);
	}

	public void testFrenar() throws InterruptedException{
//		assertTrue(motor.getAceleracion() == 0);
//		motor.acelerar();
//		Thread.sleep(TIEMPO_MS);
//		motor.frenar();
//		assertEquals(((-1)*(motor.obtenerAceleracionMax())), motor.getAceleracion(), 0.001);
//		Thread.sleep(TIEMPO_MS*3);
//		assertTrue(motor.getAceleracion() == 0);
//		assertTrue(motor.getVelocidad() == 0);
	}
}